import { CustomRequestOptions } from '@/interceptors/request'
import { useUserStore } from '@/store'
import tui from './utils'

export const http = (options: CustomRequestOptions) => {
  !options.hideRequestLoading && uni.showLoading({ title: '加载中...' })

  const userStore = useUserStore()
  // 1. 返回 Promise 对象
  return new Promise<IResData>((resolve, reject) => {
    uni.request({
      ...options,
      dataType: 'json',
      // #ifndef MP-WEIXIN
      responseType: 'json',
      // #endif
      // 响应成功
      success: (res) => {
        const data = res.data as IResData

        if (data.code === 0) {
          // 0 提取核心数据 res.data
          !options.hideRequestLoading && uni.hideLoading()
          return resolve(data)
        } else if (res.statusCode === 401) {
          // 401错误  -> 清理用户信息，跳转到登录页
          userStore.clearUserInfo()
          userStore.clearToken()
          !options.hideRequestLoading && uni.hideLoading()

          // uni.reLaunch({
          //   url: '/pages/index/index',
          //   success(result) {
          //     tui.toast(tui.isNotBlank(data.msg) ? data.msg : '登录超时，请重新登录')
          //   },
          // })
          reject(res)
        } else {
          // !0 -> 根据后端错误信息轻提示
          !options.hideRequestLoading && uni.hideLoading()
          !options.hideErrorToast && tui.toast(data.msg || '请求错误,请稍候再试')
          reject(res)
        }
      },
      // 响应失败
      fail(err) {
        !options.hideRequestLoading && uni.hideLoading()
        tui.toast('网络错误，换个网络试试')
        reject(err)
      },
    })
  })
}
